﻿
/*
 * Filter 过滤器
 * 
 * 1、五种过滤器：
 * 授权：Authorization  --- Program.cs 中授权中间件有这个单词：app.UseAuthorization();
 * 行为：Action   ----MVC控制器中的Action
 * 异常：Exception  ---- 写try 然后table table
 * 结果：Result
 * 资源：Resource
 * 2、自定义过滤器
 *  1）新建一个类：MyExceptionFilter
 *  2）继承想实现的过滤器的接口。如想实现授权过滤器，那么需要继承授权过滤器的接口
 *  3）实现这个接口的方法
 *  4）在对应的方法中实现逻辑即可
 * 3、第二步只是创建一个过滤器，但还没有起作用。
 * 要让它有作用，需要注册一下即可。（注册到管道）
 * **/

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace Max.PH4_2102A.Shopping.API.MyFilter
{
    /// <summary>
    /// 我自定义的异常过滤器
    /// </summary>
    public class MyExceptionFilter : IExceptionFilter
    {
        /*
         * 系统出现的异常信息都会走这个过滤器
         * 只需要处理异常即可，处理方式有很：写日志、发邮件、写到数据库......
         * **/
        public void OnException(ExceptionContext context)
        {
            var log = NLog.LogManager.GetCurrentClassLogger();
            log.Error(context.Exception.Message);

            //给前台的友好提示
            context.Result = new JsonResult(new {  Code = 500 ,Message = $"服务器内部错误，具体原因：{context.Exception.Message}" });
        }
    }
}
